/* Expains how to pass data to thread
 * Create two threads use pthread_join
 */

#include <stdio.h>
#include <pthread.h>

/* parameters to print_function */
struct char_print_parms
{
    /* The character to print */
    char character;
    /* The number of times to print character */
    int count;
};

/* prints number of characters to stderr, as given by PARAMATERS,
 * which is a pointer to a struct char_print_parms
 */

void *
char_print (void * parameters)
{
    /* cast a pointer to the rigth type */
    struct char_print_parms *p = (struct char_print_parms *) parameters;
    int i;

    for (i = 0; i < p->count; i++) {
	fputc (p->character, stderr);
    }

    return NULL;
}

/* The main program */
int main (int argc, char **argv)
{
    pthread_t thread1_id;
    pthread_t thread2_id;

    struct char_print_parms thread1_args;
    struct char_print_parms thread2_args;

    /* create a new thread to print 30,000 'x's */
    thread1_args.character = 'x';
    thread1_args.count = 30000;
    pthread_create (&thread1_id, NULL, &char_print, &thread1_args);

    /* create a new thread to print 20,000 'o's */
    thread2_args.character = 'o';
    thread2_args.count = 20000;
    pthread_create (&thread2_id, NULL, &char_print, &thread2_args);

#if TEST_JOIN
    /* make sure the first thread has finished */
    pthread_join (thread1_id, NULL);
    /* make sure the second thread has finished */
    pthread_join (thread2_id, NULL);
#endif

    return 0;
}
